package com.ihr360.payroll.model.dto.salary.projection;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.ihr360.authority.sharing.model.IResourceControl;
import com.ihr360.commons.model.type.WorkHourType;
import com.ihr360.payroll.model.dto.attendance.plan.AttendancePlan;
import com.ihr360.payroll.model.dto.attendance.rule.SalaryAdjustWorkHourConfig;
import com.ihr360.payroll.model.dto.attendance.rule.enroll.EnrollAdjustRuleWorkHourConfig;
import com.ihr360.payroll.model.dto.attendance.rule.overtime.OvertimeRuleWorkHourConfig;
import com.ihr360.payroll.model.dto.attendance.rule.personalleave.PersonalLeaveRuleWorkHourConfig;
import com.ihr360.payroll.model.dto.attendance.rule.sickleave.SickLeaveRuleWorkHourConfig;
import com.ihr360.payroll.model.vo.EnrollAdjustRuleVo;
import com.ihr360.payroll.model.vo.OvertimeRuleVo;
import com.ihr360.payroll.model.vo.PayrollConfigVo;
import com.ihr360.payroll.model.vo.PersonalLeaveRuleVo;
import com.ihr360.payroll.model.vo.SickLeaveRuleVo;
import com.ihr360.rest.core.Ihr360Projection;

/**
 * @author tomtao
 */
@Ihr360Projection(name = "attendancePlanProjection", types = {AttendancePlan.class})
public interface AttendancePlanProjection extends IResourceControl {

    Long getId();

    boolean getEnabled();

    String getName();

    @JsonProperty("systemTemplate")
    boolean getIsSystemTemplate();

    String getRemark();

    WorkHourType getWorkHourType();

    OvertimeRuleWorkHourConfig getOvertimeConfig();

    SickLeaveRuleWorkHourConfig getSickLeaveConfig();

    PersonalLeaveRuleWorkHourConfig getPersonalLeaveConfig();

    EnrollAdjustRuleWorkHourConfig getEnrollAdjustConfig();

    SalaryAdjustWorkHourConfig getSalaryAdjustConfig();

    @JsonProperty(value = "payrollConfig")
    PayrollConfigVo getPayrollConfigVo();

    @JsonProperty(value = "overtimeRule")
    OvertimeRuleVo getOvertimeRuleVo();

    @JsonProperty(value = "sickLeaveRule")
    SickLeaveRuleVo getSickLeaveRuleVo();

    @JsonProperty(value = "personalLeaveRule")
    PersonalLeaveRuleVo getPersonalLeaveRuleVo();

    @JsonProperty(value = "enrollAdjustRule")
    EnrollAdjustRuleVo getEnrollAdjustRuleVo();

    boolean getSyntheticalBeOnDuty();

    boolean getStandardBeOnDuty();

}
